package Leetcode;

public class 力扣27_移除元素 {
    /**
     * 双指针
     */
    static int removeElement1(int[] nums, int val) {
        int i = 0;
        for (int j = 0; j < nums.length; j++) {
            if (nums[j] != val) {
                nums[i] = nums[j];
                i++;
            }
        }
        return i;
    }

    /**
     * 官网双指针算法（挖坑填位）
     * 第一个算法当要移除的元素很少时 性能不好
     * [1，2，3，5，4]，Val=4 会对前四个元素做不必要的复制操作
     * num=[4，1，2，3，5]，Val=4 会将前面几个元素左移
     */
    static int removeElement2(int[] nums, int val) {
        int i = 0;
        int n = nums.length;
        while (i < n) {
            if (nums[i] == val) {
                nums[i] = nums[n - 1];
                n--;
            } else {
                i++;
            }
        }
        return n;
    }

    public static void main(String[] args) {
        int[] nums = {0, 1, 2, 2, 3, 0, 4, 2};
        int l = removeElement2(nums, 2);
        System.out.println(l);
        for (int i = 0; i < l; i++) {
            System.out.print(nums[i] + "\t");
        }
    }
}
